Property system

Properties provide the means to specify and examine the state, appearance, and behavior of nodes. For example, a property can define a color, indicate whether a button is pressed, or specify the alignment of an item.

You can work with properties by setting the property values in Kanzi Studio and accessing them in code without understanding how the property system works. However, to take full advantage of the Kanzi property system features, you have to become familiar with how the property system works.

Properties provide a uniform way to access data of Kanzi nodes, so that many Kanzi subsystems can manipulate the data. That way you can, for example, animate property values, provide bindings between property values, and monitor property value changes.

Any property value can be affected by multiple input sources. The property system defines the rules of how to resolve the property value from all inputs and resolves the current value. For example, you can specify the value of a property directly, some properties can have default values, styles can affect property values, and animations and state manager can modify property values. This allows to minimize the number of places where the values have to be changed manually by offering rules that are applied automatically.

See Creating property types.

Property data type

Each property is described by a property type. The property type uniquely describes the property where it is used, the name and the type of values the property holds. The data type defines the type of the data of the property.

For example, the Node::Visible property type is used in the Node class and derived classes and controls the visibility of nodes. You can use its name (Node.Visible) to find the property type during runtime and since its type is boolean it accepts values true or false.

Note that in Kanzi Studio you can have more specialized property types, but their representation comes only from the data types listed above. For example, enumeration values are represented as integer values even though they limit the range of values to the entries defined in the enumeration.

Property usage

Most Kanzi properties are defined in the classes that use them. Such properties are used to configure appearance, state, or behavior of the object where they are defined. For example, the Text property in the Text Block node defines the text rendered in the node, and the Visible property controls the visibility of a node and all its derived nodes.

However, some Kanzi properties configure the appearance, behavior, or state of other objects. For example, materials can define the Diffuse Color property which you can assign to nodes using that material, Grid Layout defines the Row and Column properties, but they are assigned to the items under the Grid Layout node, and not the Grid Layout node itself. In Kanzi these properties are referred to as attached properties.

Default property value

Each property type defines the default value of that property. When queried, Kanzi returns the default value of the property, if you do not specify a property value either directly or indirectly (through styles, inheritance, and so on). For example, even though the Node::Visible property is not specified for every node to be true, the default value for this property is true. When queried, all nodes are visible by default.

Not specifying the value, but using the default value can save you time when developing the application. Alternatively, not having a property value is a condition for some property types. For example, properties Node::Width and Node::Height let the user control the size of a particular node, for example, but setting Width and Height to 100 pixels, you force the size of the control to be 100 pixels wide and 100 pixels high. By not specifying these values, you let the control itself decide its own size. For example, the Image node can decide its size based on the image that it shows, or a Stack Layout node can determine to be the size of all of its items.

Property precedence

Querying a property value produces one result, but while determining the value the property system evaluates multiple sources that can affect the property value. The property value sources are evaluated in a specific order.

Kanzi Engine resolves the runtime values based on these precedence rules (the highest first):

See also

Using styles

State manager

Triggers

Animations